#include "los_sys.h"
#include "sys_init.h"

#ifndef _BSP_API_H
#define _BSP_API_H
#include <stdint.h>

#define MASTER 0
#define SLAVE 0x80

#define MOTOR_FOWARD 0
#define MOTOR_REV 1

#define LED_OPEN 0
#define LED_CLOSE 1

#define LED_SYS_NORMAL_(a)      if(a==LED_OPEN){HAL_GPIO_WritePin(GPIOH, GPIO_PIN_12, GPIO_PIN_SET);} \
                                else{HAL_GPIO_WritePin(GPIOH, GPIO_PIN_12, GPIO_PIN_RESET);}
#define LED_SYS_FAULT_(a)       if(a==LED_OPEN){HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15, GPIO_PIN_SET);} \
                                else{HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15, GPIO_PIN_RESET);}
#define ETH1_(a)                if(a==LED_OPEN){HAL_GPIO_WritePin(GPIOD, GPIO_PIN_11, GPIO_PIN_RESET);} \
                                else{HAL_GPIO_WritePin(GPIOD, GPIO_PIN_11, GPIO_PIN_SET);}   
#define LED_RS485_1_(a)         if(a==LED_OPEN){HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, GPIO_PIN_RESET);} \
                                else{HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, GPIO_PIN_SET);}                                
#define LED_RS485_2_(a)         if(a==LED_OPEN){HAL_GPIO_WritePin(GPIOD, GPIO_PIN_13, GPIO_PIN_RESET);} \
                                else{HAL_GPIO_WritePin(GPIOD, GPIO_PIN_13, GPIO_PIN_SET);}
#define PLC_WIFI_ETH2_(a)       if(a==LED_OPEN){HAL_GPIO_WritePin(GPIOG, GPIO_PIN_2, GPIO_PIN_RESET);} \
                                else{HAL_GPIO_WritePin(GPIOG, GPIO_PIN_2, GPIO_PIN_SET);}

void 	vav_set_motor_dir(uint8_t MOTOR_dir);
void 	vav_read_ai(uint8_t channel, uint8_t signal);
void 	vav_read_bi(uint8_t channel);
void 	vav_motor_stop();
uint8_t get_switch(uint8_t *datatemp);
void 	mode_switch();
void 	get_pressure_and_valvedegree_thread();
void 	get_paneldata();
float 	vav_get_panel_set_temp();
float 	vav_get_panel_env_temp();
int 	vav_get_panel_status();
int 	vav_get_panel_unit();
uint8_t vav_get_panel_set_temp_err();
uint8_t vav_get_panel_env_temp_err();
uint8_t vav_get_panel_status_err();
void 	vav_set_sys_status_led(uint8_t sign);
double 	vav_get_pressure();
double 	vav_get_valve_degree();

float	vav_get_sum_degree();						//获得累计转动角度
int		vav_get_sum_count();						//获得累计转动次数
void	vav_add_sum_degree(float fDegree);			//将角度加入累加器
void	vav_add_sum_count(uint32_t iCount);			//将转动次数加入累加器
int		vav_sumsta_ischanged();						//设备的累加状态是否有变化
void 	vav_read_flash_status(); //读取FLASH中保存的设备状态
void 	vav_write_flash_status(); //将设备状态写入FLASH中保存

uint8_t vav_read_valve_cali_status();  			  	//读取风阀开度校准状态
void sync_panel_data(uint16_t reg, int value);
void sync_panel_err(uint16_t reg, uint8_t err);
void motor_task();
void set_target_degree(int degree);
void vav_set_panel_set_temp(float set_temp);
void vav_set_panel_status(int status);

#endif
